<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EOS.IO: eosio.system</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="eos-logo.png"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">EOS.IO
   &#160;<span id="projectnumber">DAWN3.0.1</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">eosio.system </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>This contract enables users to stake tokens, and then configure and vote on producers and worker proposals.</p>
<p>Users can also proxy their voting influence to other users.</p>
<p>The state of this contract is read to determine the 21 active block producers.</p>
<p>Actions: The naming convention is codeaccount::actionname followed by a list of paramters.</p>
<p>Indicates that a particular account wishes to become a producer </p><h2>eosio.system::cfgproducer account config</h2>
<ul>
<li><b>account</b> the producer account to update</li>
<li>updates the configuration settings for a particular producer, these</li>
</ul>
<p>Storage changes are billed to 'account'</p>
<h2>eosio.system::okproducer account producer vote</h2>
<ul>
<li><b>account</b> the account which is doing the voting</li>
<li><b>producer</b> the producer which is being voted for (or unvoted for)</li>
<li><b>vote</b> true if the producer should be voted for, false if not</li>
</ul>
<p>Each account has a maximum number of votes it can maintain. Storage changes will be billed to 'account'</p>
<h2>eosio.system::setproxy account proxy</h2>
<ul>
<li><b>account</b> the account which is updating it's proxy</li>
<li><b>proxy</b> the account which will have the power to vote account's stake</li>
</ul>
<p>All current votes are removed and a new proxy link is created. The votes for every producer the proxy has voted for are updated immediately.</p>
<p>Storage changes will be billed to 'account'</p>
<h2>eosio.system::unstake account quantity</h2>
<ul>
<li><b>account</b> - the account which is requsting their balance be unstaked</li>
<li><b>quantity</b> - the quantity which will be unstaked, unstaked tokens lose voting influence immediately</li>
<li>in order to unstake tokens, an account must request them. The user will receive them over time via weekly withdraws. The length of time will be configured by the median time as set by the active producers.</li>
<li>If this is called while in the process of unstaking, the currently pending unstake is canceled as if quantity were 0, then it is applied as if a new unstake request was made.</li>
<li>all producers this 'from' has voted for will have their votes updated immediately.</li>
<li>bandwidth and storage for the deferred transaction will be billed to 'from'</li>
</ul>
<h2>eosio.system::withdraw account</h2>
<ul>
<li>this action can only be triggered by eosio.system via a deferred transaction generated by unstake</li>
<li>this will generate an inline eosio.token::transfer call from=eosio.system to=account and amount equal to the next withdraw increment</li>
<li>this will generate another deferred withdraw to continue the process if there are still withdraws to be made</li>
</ul>
<h2>eosio.system::transfer from to amount memo</h2>
<ul>
<li>decrements balance of from if amount &lt;= balance</li>
<li>increments balance of to by amount</li>
<li>memo is ignored</li>
</ul>
<h2>eosio.system::stakevote account amount</h2>
<ul>
<li>the primary currency of eosio is controlled by the token contract which enables users to transfer balances from one user to another. The receiver is notified on incoming balances and the vote contract will stake the tokens on receipt.</li>
<li>all producers this 'from' has voted for will have their votes updated immediately.</li>
</ul>
<h2>eosio.system::onblock account blocktime blocknum</h2>
<ul>
<li>this special action is triggered when a block is applied by the given producer and cannot be generated from any other source. It is used to pay producers and calculate missed blocks of other producers.</li>
<li>producer pay is deposited into the prodcer's stake balance and can be withdrawn over time.</li>
<li>if blocknum is the start of a new round this may update the active producer config from the producer votes.</li>
</ul>
<h2>eosio.system::freeze producer accounts true|false</h2>
<ul>
<li>requires permission of the  account</li>
<li>if an account is frozen, all authorizations of that account are rejected and the code for that account will not be run</li>
</ul>
<h2>eosio.system::paystandby producer</h2>
<ul>
<li>every block some amount of tokens is paid</li>
<li>at most once per day a producer may claim a percentage of the standby pay equal to their totalvotes / allvotes </li>
</ul>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
